package com.hs.framework.utils;

import android.content.Context;
import android.os.Environment;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ThreadPoolUtils {

    // 线程池实例，使用volatile保证可见性和防止指令重排
    private static volatile ExecutorService executorService;

    // 私有化构造函数，防止外部实例化工具类
    private ThreadPoolUtils() {
    }

    /**
     * 获取线程池实例的方法
     * 根据不同的业务场景需求，可以在这里调整线程池的参数配置
     * 这里采用的是一种比较通用的配置示例，可按需修改
     *
     * @return 线程池实例
     */
    public static ExecutorService getExecutorService() {
        if (executorService == null) {
            synchronized (ThreadPoolUtils.class) {
                if (executorService == null) {
                    // 核心线程数
                    int corePoolSize = 4;
                    // 最大线程数
                    int maximumPoolSize = 10;
                    // 线程空闲存活时间
                    long keepAliveTime = 60;
                    // 时间单位（秒）
                    TimeUnit unit = TimeUnit.SECONDS;
                    // 任务队列，这里使用LinkedBlockingQueue作为示例（可根据实际情况更换队列类型）
                    BlockingQueue<Runnable> workQueue = new LinkedBlockingQueue<>();

                    executorService = new ThreadPoolExecutor(
                            corePoolSize,
                            maximumPoolSize,
                            keepAliveTime,
                            unit,
                            workQueue
                    );
                }
            }
        }
//        Log.e("executorService",executorService.e)
        return executorService;
    }

    /**
     * 关闭线程池的方法
     * 调用该方法会平滑地关闭线程池，等待正在执行的任务完成后再关闭线程池
     */
    public static void shutdown() {
        if (executorService!= null) {
            executorService.shutdown();
        }
    }

//    public static void copyAssetsImagesToImageDir(Context context) {
//        String imageDirPath = Environment.getExternalStorageDirectory().getPath() + "/HNIMAGE";
//        File imageDir = new File(imageDirPath);
//        if (!imageDir.exists()) {
//            imageDir.mkdirs();
//        }
//
//        try {
//            String[] assetsFiles = context.getAssets().list("image"); // 获取assets下所有文件（包括文件夹），这里先获取所有然后筛选图片文件
//            for (String assetFile : assetsFiles) {
//                if (assetFile.endsWith(".jpg") || assetFile.endsWith(".png") || assetFile.endsWith(".jpeg") || assetFile.endsWith(".gif")) {
//                    File targetFile = new File(imageDir, assetFile);
//                    if (!targetFile.exists()) {
//                        InputStream inputStream = context.getAssets().open(assetFile);
//                        FileOutputStream outputStream = new FileOutputStream(targetFile);
//
//                        byte[] buffer = new byte[1024];
//                        int length;
//                        while ((length = inputStream.read(buffer)) > 0) {
//                            outputStream.write(buffer, 0, length);
//                        }
//
//                        outputStream.close();
//                        inputStream.close();
//                    }
//                }
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
}